var _getQuestionPageUrl = "/Question/GetPage";
var _getQuestionUrl = "/Question/Get";
var _deleteQuestionUrl = "/Question/Delete";
var _viewQuestionUrl = "/Question/View";
var _createQuestionUrl = '/Question/Create';
var _createAnswerUrl = '/Question/CreateAnswer';
var _addQuestionUrl = '/Question/Add';
var _updateQuestionUrl = '/Question/Update';
var _deleteQuestionId = -1;

// Convert function
function ShareTypeToString(type) {
    if (type == 0) {
        return "Chia sẻ";
    } else {
        return "Cá nhân";
    }
}

function QuestionTypeToString(type) {
    if (type == 0) {
        return "Nhiều lựa chọn";
    } else {
        return "Nhiều câu hỏi con";
    }
}

function GetQuestionPage(page,subjectId, count, orderCol) {
    var item = {};
    item.page = page;
    item.count = count;
    item.orderCol = orderCol;
    item.subjectId = subjectId;

    $('#overlay-loading').show();

    PostServerData(_getQuestionPageUrl, item, GetQuestionPageCallback);
}

function GetQuestionPageCallback(data) {
    if (data.result == true) {
        $('#question-list-data').html(data.data);
        $('#question-count').html('Tổng : ' + data.itemCount);
        $('#question-pages').html(data.paging);
    } else {
        showMessageBox("Tải dữ liệu thất bại.<br/>" + data.message, "Thông báo");
    }
    $('#overlay-loading').hide();
}

// View Question
function ViewQuestion(id) {
    if ($('#create_multichoise_question').length > 0) {
        $('#create_multichoise_question').remove();
    }

    var data = {};
    data.id = id;

    $('#overlay-loading').show();

    PostServerData(_viewQuestionUrl, data, ViewQuestionCallback);
}

function ViewQuestionCallback(data) {
    if (data.result) {
        $('body').append(data.data); // Gắn vào thẻ body
        $('#create_multichoise_question').dialog({ // Format thành dialog bằng jQuery UI
            autoOpen: true,
            modal: true,
            resizable: false,
            draggable: false,
            width: 920,
            buttons: {
                "Lưu": function () {
                    UpdateQuestion();
                },
                "Hủy": function () {
                    $(this).dialog("close");
                }
            }
        });
        SetupEditor('#txt_content, .ans_item .ans_content');
        $("#answer_list").sortable();
        $("#answer_list").disableSelection();
    } else {
        showMessageBox(data.message, "Thông báo");
    }
    $('#overlay-loading').hide();
}

// Get question
function GetQuestion(id) {
    var data = {};
    data.id = id;

    $('#question_wrapper_block').hide();

    PostServerData(_getQuestionUrl, data, GetQuestionCallback);
}

function GetQuestionCallback(data) {
    if (data.result) {
        alert(data.data.toSource());
    } else {
        showMessageBox(data.message, "Thông báo");
    }
    $('#question_wrapper_block').show('fast');
}

function DeleteQuestion(id) {
    var data = {};
    data.id = id;
    PostServerData(_deleteQuestionUrl, data, DeleteQuestionCallback);
}

function DeleteQuestionCallback(data) {
    if (data.result) {
        $('#dialog-confirm-delete').dialog("close");
        showMessageBox("Xóa câu hỏi thành công.","Thông báo");
        GetQuestionPage(_currentPage, _subjectId, _itemPerPage, _currentOrderCol);
    } else {
        showMessageBox(data.message, "Thông báo");
    }
}

// delete question
function SetupDeleteConfirm() {
    $('#dialog-confirm-delete').dialog({
        resizable: false,
        draggable: false,
        modal: true,
        autoOpen: false,
        buttons: {
            "Đồng ý xóa": function () {
                DeleteQuestion(_deleteQuestionId);
            },
            "Hủy": function () {
                $(this).dialog("close");
            }
        }
    });
}

function ShowConfirmDelete(id) {
    _deleteQuestionId = id;
    $('#dialog-confirm-delete').dialog("open");
}

// Create Question
function CreateQuestion(type) {
    if ($('#create_multichoise_question').length > 0) {
        $('#create_multichoise_question').remove();
    }
    var data = {};
    data.type = type;

    PostServerData(_createQuestionUrl, data, CreateQuestionCallback);
}

function CreateQuestionCallback(data) {
    if (data.result) {
        $('body').append(data.data); // Gắn vào thẻ body
        $('#create_multichoise_question').dialog({ // Format thành dialog bằng jQuery UI
            autoOpen: true,
            modal: true,
            resizable: false,
            draggable: false,
            width: 920,
            buttons: {
                "Lưu": function () {
                    SaveQuestion();
                },
                "Hủy": function () {
                    $(this).dialog("close");
                }
            }
        });
        SetupEditor('#txt_content, .ans_item .ans_content');
        $("#answer_list").sortable();
        $("#answer_list").disableSelection();
    } else {
        showMessageBox(data.message, "Thông báo");
    }
}

// Create Answer
function CreateAnswer() {
    var item = '<div class="ans_item">'
            + '<div class="ans_content">Nhập nội dung</div>'
                + '<div class="ans_ctrl_block">'
                    + '<input class="ans_true" type="radio" name="button[]" />'
                        + '<a class="control_btn icon_delete" href="javascript:void(0)" onclick="DeleteAnswer(this)"></a></div></div>';
    $('#answer_list').append(item);
    SetupEditor($('.ans_item').last().children('.ans_content'));
}

function DeleteAnswer(current) {
    $(current).parents('.ans_item').remove();
}

// Setup editor
function SetupEditor(element) {
    $(element).dblclick(function () {
        var clickItem = this;
        $(clickItem).redactor({
            imageUpload: '../demo/scripts/image_upload.php',
            fileUpload: '../demo/scripts/file_upload.php',
            imageGetJson: '../demo/json/data.json',
            buttons: ['html', '|', 'formatting', 'fontsize', 'fontfamily', '|', 'bold', 'italic', 'underline', 'deleted', '|', 'superscript', 'subscript', '|',
						'unorderedlist', 'orderedlist', 'outdent', 'indent', '|', 'image',
						'video', 'file', 'table', 'link', '|', 'fontcolor', 'backcolor', '|',
						'alignment', '|', 'horizontalrule'],
            callback: function (obj) {
                var selfRemove = function () {
                    $(clickItem).destroyEditor();
                };
                obj.addBtn('endedit', 'Finish edit', selfRemove);
                obj.setBtnRight('endedit');
            }
        });
    });
}

// Get question object
function GetObject() {
    var question = {};
    var id = $('.form_container').attr('oId');
    if (id != 0)
        question.Id = id;
    question.Type = $('#txt_type').attr('oid');
    question.SubjectId = $('#txt_subject').val();
    question.Content = $('#txt_content').html();
    question.ShareType = $('#txt_share').val();
    question.Level = $('#txt_level').val();
    question.Note = $('#txt_note').val();

    question.Answers = [];
    var answers = $('.ans_item');
    var orderChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');
    for (var inx = 0; inx < answers.length; inx++) {
        var obj = {};
        obj.Content = $(answers[inx]).children('.ans_content').html();
        obj.IsTrue = $(answers[inx]).children('.ans_ctrl_block').children('.ans_true').attr('checked') === 'checked';
        obj.OrderChar = orderChars[inx];
        question.Answers[inx] = obj;
    }
    return question;
}

function ValidateQuestion(question) {
    var result = '';

    if (question.Type < 0)
        result = "Loại câu hỏi không hợp lệ.<br />";
    if (question.SubjectId == '' || question.SubjectId < 0)
        result += "Phải chọn môn.<br />";
    if (question.Content == '')
        result += "Phải nhập nội dung câu hỏi<br/>";
    if (typeof question.Answers === 'undefined' || question.Answers.length < 2)
        result += 'Phải có ít nhất 2 đáp án<br/>';
    else {
        for (var inx1 = 0; inx1 < question.Answers.length; inx1++) {
            if (question.Answers[inx1].Content == '') {
                result += 'Nội dung đáp án không được bỏ trống.<br/>';
                break;
            }
        }
        var trueCount = 0;
        for (var inx2 = 0; inx2 < question.Answers.length; inx2++) {
            if (question.Answers[inx2].IsTrue)
                trueCount++;
        }
        if (trueCount != 1)
            result += 'Câu hỏi phải có một đáp án đúng.<br />';
    }
    return result;
}

function UpdateQuestion() {
    var question = GetObject();
    var validateResult = ValidateQuestion(question);
    if (validateResult != '') {
        showMessageBox(validateResult, 'Thông báo');
        return;
    }

    var data = $.postify(question);
    PostServerJson(_updateQuestionUrl, data, SaveQuestionCallback);
}

function SaveQuestion() {
    var question = GetObject();

    var validateResult = ValidateQuestion(question);
    if (validateResult != '') {
        showMessageBox(validateResult, "Thông báo");
        return;
    }
    
    var data = $.postify(question);
    PostServerJson(_addQuestionUrl, data, SaveQuestionCallback);
}

function SaveQuestionCallback(data) {
    if (data.result) {
        showMessageBox('Lưu thành công', 'Thông báo');
        GetQuestionPage(_currentPage, _subjectId, _itemPerPage, _currentOrderCol);
    } else {
        showMessageBox(data.message, 'Thông báo');
    }
}
